package com.holyn.guofang.model.webhttp.observable;

import com.holyn.guofang.model.webhttp.wo.AddCardOrderWo;
import com.holyn.guofang.model.webhttp.wo.AttachedCardDictionaryWo;
import com.holyn.guofang.model.webhttp.wo.CardDictionaryWo;
import com.holyn.guofang.model.webhttp.wo.CardOrderDetailWo;
import com.holyn.guofang.model.webhttp.wo.CouponInfoWo;
import com.holyn.guofang.model.webhttp.wo.StatusWo;
import com.holyn.guofang.model.webhttp.wo.UserCardListWo;

import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

/**
 * Created by Holyn on 2017/8/14.
 */

public interface CardObservable {
    /**
     * 2.5.1 获取可购买的国方卡
     *
     * @param currency 币种(1:人民币，2:美元)
     * @param pageSize 每页返回记录数，传的数为非正数时返回所有记录
     * @param page 页码，传的数为非正数时返回所有记录
     * @return
     *
     * status-操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，-3:用户 ID 与登录信息不匹配， -4:登录已过期，-5:验证码不匹配
     */
    @FormUrlEncoded
    @POST("listCardDictionary.ashx")
    Observable<CardDictionaryWo> listCardDictionary(
            @Field("currency") Integer currency,
            @Field("pageSize") Integer pageSize,
            @Field("page") Integer page
    );

    /**
     * 2.5.2 获取可购买的国方附属卡
     *
     * @param parentID 国方 ID(只买附属卡传 0)
     * @return
     *
     * status-操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，-3:用户 ID 与登录信息不匹配， -4:登录已过期，-5:验证码不匹配)
     */
    @FormUrlEncoded
    @POST("listAttachedCardDictionary.ashx")
    Observable<AttachedCardDictionaryWo> listAttachedCardDictionary(
            @Field("parentID") Integer parentID
    );

    /**
     * 2.5.3 获取优惠信息
     * @param type 购卡类型(1:购买主卡，2:只购买附属卡)
     * @param cardCount 当前购买的附属卡数量(不包含当前启用的主卡下 的附属卡数量)
     * @return
     *
     * status-操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，-3:用户 ID 与登录信息不匹配， -4:登录已过期，-5:验证码不匹配)
     */
    @FormUrlEncoded
    @POST("getCouponInfo.ashx")
    Observable<CouponInfoWo> getCouponInfo(
            @Field("type") Integer type,
            @Field("cardCount") Integer cardCount
    );

    /**
     * 2.5.4 提交国方卡订单
     * @param cardID 国方卡 ID(只购买附属卡时传 0)
     * @param attenedCardID 附属卡 ID(不购买附属卡时传 0)
     * @param attenedCardCount 附属卡数量(不购买附属卡时传 0)
     * @param needCoupon 是否应用优惠(1:需要，0:不需要)
     * @param payWay 支付方式(1:线下支付，2:银联支付，3:支付宝 支付，4:苹果支付)
     * @param couponCardNum 优惠卡号，needCoupon = 1 且需要输入优惠卡号 时使用
     * @param couponCardID 优惠卡 ID，needCoupon = 1 时才有效
     * @param remark 备注
     * @return
     *
     * status-操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，-3:用户 ID 与登录信息不匹配， -4:登录已过期，-5:验证码不匹配)
     */
    @FormUrlEncoded
    @POST("addCardOrder.ashx")
    Observable<AddCardOrderWo> addCardOrder(
            @Field("cardID") Integer cardID,
            @Field("attenedCardID") Integer attenedCardID,
            @Field("attenedCardCount") Integer attenedCardCount,
            @Field("needCoupon") Integer needCoupon,
            @Field("payWay") Integer payWay,
            @Field("couponCardNum") String couponCardNum,
            @Field("couponCardID") Integer couponCardID,
            @Field("remark") String remark
    );

    /**
     * 2.5.5 获取国方卡订单详情
     * @param id 订单 ID
     * @return
     */
    @FormUrlEncoded
    @POST("cardOrderDetail.ashx")
    Observable<CardOrderDetailWo> cardOrderDetail(
            @Field("id") Integer id
    );

    /**
     * 2.5.6 获取用户的国方卡信息
     * @param activeState 启用状态，1:当前已启用，2:未启用且有效，3: 已过期，其余为不限
     * @param pageSize 每页返回记录数，传的数为非正数时返回所有记录
     * @param page 页码，传的数为非正数时返回所有记录
     * @return
     */
    @FormUrlEncoded
    @POST("userCardList.ashx")
    Observable<UserCardListWo> userCardList(
            @Field("activeState") Integer activeState,
            @Field("pageSize") Integer pageSize,
            @Field("page") Integer page
    );

    /**
     * 2.5.7 启用国方卡
     * @param cardID 卡 ID，由 2.5.6 获取
     * @param beginDate 启用日期，格式:年-月-日
     * @param validMethod 用卡及扣费确认规则(0:密码验证，1:验证码验 证，2:无需密码)
     * @param password 用卡密码(validMethod = 0 时才需要传该参数)
     * @return
     *
     * status-操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，-3:用户 ID 与登录信息不匹配， -4:登录已过期，
     *      -5:验证码不匹配，-6:卡不存在， -7:卡不属于已登录的用户，-8:卡已启用，-9:卡 已购买但未支付成功)
     */
    @FormUrlEncoded
    @POST("activeCard.ashx")
    Observable<StatusWo> activeCard(
            @Field("cardID") Integer cardID,
            @Field("beginDate") String beginDate,
            @Field("validMethod") Integer validMethod,
            @Field("password") String password
    );

    /**
     * 2.5.8 修改国方卡的用卡及扣费确认规则
     * @param cardID 卡 ID，由 2.5.6 获取
     * @param validMethod 用卡及扣费确认规则(0:密码验证，1:验证码验 证，2:无需密码)
     * @param validCode 手机或邮箱收到的验证码
     * @param password 用卡密码(validMethod = 0 时才需要传该参数)
     * @return
     *
     * status-操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，-3:用户 ID 与登录信息不匹配， -4:登录已过期，
     *      -5:验证码不匹配，-6:卡不存在， -7:卡不属于已登录的用户，-8:验证码不匹配，-9: 卡已购买但未支付成功)
     */
    @FormUrlEncoded
    @POST("updateValidMethod.ashx")
    Observable<StatusWo> updateValidMethod(
            @Field("cardID") Integer cardID,
            @Field("validMethod") Integer validMethod,
            @Field("validCode") String validCode,
            @Field("password") String password
    );

    /**
     * 2.5.9 获取修改用卡及扣费确认规则的验证码,String userName只是占位符
     * @param userName
     * @return
     *
     * status-操作是否成功(1:是，0:否，-1:用户不存在，-2: 登录信息不存在，-3:用户 ID 与登录信息不匹配， -4:登录已过期，
     *      -5:验证码不匹配)
     */
    @FormUrlEncoded
    @POST("getValidMethodCode.ashx")
    Observable<StatusWo> getValidMethodCode(
            @Field("userName") String userName
    );
}
